package io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 提高每次读取的数据量，减少实际读写的次数，可以提高读写效率
 *
 * 块读写文件复制操作
 * 块读写：一次读写一组字节，而不是一次读写一个字节
 */
public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        // 创建输入流，从硬盘中读取数据
        FileInputStream fis = new FileInputStream("./img/image1.jpg");

        // 创建输出流，将数据写入到硬盘中
        FileOutputStream fos = new FileOutputStream("./img/image1_cop.jpg");

        // 定义一个整型去存储每次读取的返回值  int read()
        int d;

        // 获取复制前的时间戳
        long start = System.currentTimeMillis();

        // 创建一个字节数组，用于存储每次读取到的字节数组
        byte[] b = new byte[1024 * 10];

        while((d = fis.read(b)) != -1) {
            // 读取到数据，将数据写入到输出流中
            // fos.write(b); // 使用这种方法容易导致文件损坏，我们应该读到多少内容，复制多少内容
            // 应该这样写
            fos.write(b, 0, d);
        }

        // 获取复制后的时间戳
        long end = System.currentTimeMillis();
        System.out.println("复制文件耗时：" + (end - start) + "毫秒");
        fos.close();
        fis.close();

    }
}
